import { INPUT_CONSTRAINTS } from '@/pages/workflow/components/InspectData'
import TextareaWithParamsV2 from '@/pages/workflow/components/TextareaWithParamsV2'
import { useEffect, useState } from 'react'

/**
 * 大模型用户输入配置对象。
 *
 * @property {Object} info - 数据对象，包含与用户输入相关的所有数据。
 * @property {Array<Object>} sourceOptions - 溯源选项列表，用于提供数据来源的选择。
 * @property {Function} editData - 编辑功能函数，用于更新或编辑 `info` 中的数据。
 * @property {string} [placeholder=''] - 默认显示文本，默认为空字符串（''），作为输入框的占位符。
 * @property {string} [errorShow=''] - 报错提示文本，默认为空字符串（''）。当有错误发生时，将显示此文本。
 * @property {('' | 'noRequired')} [type=''] - 空校验类型：
 *   - '': 默认为空字符串，表示需要进行空校验；
 *   - 'noRequired': 表示不判断是否为空，默认为 ''。
 */
export default function InputCont({
  info,
  sourceOptions,
  editData,
  placeholder = '',
  errorShow = '用户输入不能为空',
  type = ''
}) {
  const [loadContent, setLoadContent] = useState(false)
  const [value, setValue] = useState('')

  useEffect(() => {
    setValue(info.userInput)
  }, [info])

  useEffect(() => {
    setLoadContent(true)
  }, [sourceOptions])
  const showErrorInfo = value => {
    if ((!value || !value.trim()) && !type) {
      return <span className="custom-params-invalid">{errorShow}</span>
    }

    if (value.length > INPUT_CONSTRAINTS.CALL_WORD_MAX_LENGTH) {
      return (
        <span className="custom-params-invalid">{`用户输入长度不能大于${INPUT_CONSTRAINTS.CALL_WORD_MAX_LENGTH}个字符`}</span>
      )
    }
  }
  return (
    <div className="flexCol">
      {/* <CustomTextArea
        value={value}
        onChange={e => {
          setValue(e.target.value)
          editData({
            callWord: e.target.value
          })
        }}
        placeholder="用于大模型节点的提示词，可以用{{}}引入变量"
        rows={4}
        maxLength={INPUT_CONSTRAINTS.CALL_WORD_MAX_LENGTH}
      ></CustomTextArea> */}
      {loadContent && (
        <>
          <TextareaWithParamsV2
            placeholder={placeholder || `填写用户提示词，输入'{' 选择变量进行插入。`}
            value={value}
            onChange={msg => {
              setValue(msg)
              editData({
                userInput: msg
              })
              // handleOutputTextChange(msg)
            }}
            error={
              (!type && (!value?.length || !value.trim())) || value?.length > INPUT_CONSTRAINTS.CALL_WORD_MAX_LENGTH
            }
            citeOptions={sourceOptions}
          />
          {showErrorInfo(value)}
        </>
      )}
    </div>
  )
}
